@不喜丶不悲
2年前 提问
1个回答

Docker容器虚拟化安全风险有哪些

Anna艳娜
2年前

Docker容器虚拟化安全风险有以下这些:

  • 容器隔离问题:对于Docker容器而言,由于容器与宿主机共享操作系统内核,因此存在容器与宿主机之间、容器与容器之间隔离方面的安全风险,具体包括进程隔离、文件系统隔离、进程间通信隔离等。虽然Docker通过Namespaces进行了文件系统资源的基本隔离,但仍有/sys、/proc/sys、/proc/bus、/dev、time、syslog等重要系统文件目录和命名空间信息未实现隔离,而是与宿主机共享相关资源。

  • 容器逃逸攻击:容器逃逸攻击指的是容器利用系统漏洞,“逃逸”出了其自身所拥有的权限,实现了对宿主机和宿主机上其他容器的访问。由于容器与宿主机共享操作系统内核,为了避免容器获取宿主机的root权限,通常不允许采用特权模式运行Docker容器。

  • 计算型DoS攻击:Fork Bomb是一类典型的针对计算资源的拒绝服务攻击手段,其可通过递归方式无限循环调用fork系统函数快速创建大量进程。由于宿主机操作系统内核支持的进程总数有限,如果某个容器遭到了Fork Bomb攻击,那么就有可能存在由于短时间内在该容器内创建过多进程而耗尽宿主机进程资源的情况,宿主机及其他容器就无法再创建新的进程。

  • 存储型DoS攻击:针对存储资源,虽然Docker通过Mount命名空间实现了文件系统的隔离,但CGroups并没有针对AUFS文件系统进行单个容器的存储资源限制,因此采用AUFS作为存储驱动具有一定的安全风险。如果宿主机上的某个容器向AUFS文件系统中不断地进行写文件操作,则可能会导致宿主机存储设备空间不足,无法再满足其自身及其他容器的数据存储需求。

  • Docker自身漏洞:作为一款应用Docker本身实现上会有代码缺陷。CVE官方记录Docker历史版本共有超过20项漏洞。黑客常用的攻击手段主要有代码执行、权限提升、信息泄露、权限绕过等。目前Docker版本更迭非常快,Docker用户最好将Docker升级为最新版本。

解决容器安全问题方法有以下这些:

  • Docker自身安全性改进:在过去容器里的root用户就是主机上的root用户,如果容器受到攻击,或者容器本身含有恶意程序,在容器内就可以直接获取到主机root权限。Docker从1.10版本开始,使用UserNamespace做用户隔离,实现了容器中的root用户映射到主机上的非root用户,从而大大减轻了容器被突破的风险,因此建议尽可能使用最新版Docker。

  • 保障镜像安全:为保障镜像安全,我们可以在私有镜像仓库安装镜像安全扫描组件,对上传的镜像进行检查,通过与CVE数据库对比,一旦发现有漏洞的镜像及时通知用户或阻止非安全镜像继续构建和分发。同时为了确保我们使用的镜像足够安全,在拉取镜像时,要确保只从受信任的镜像仓库拉取,并且与镜像仓库通信一定要使用HTTPS协议。

  • 加强内核安全和管理:宿主机内核尽量安装最新补丁;使用Capabilities划分权限,它实现了系统更细粒度的访问控制;启动容器时一般不建议开启特权模式,如需添加相应的权限可以使用–cap-add参数。

  • 使用安全加固组件:Linux的SELinux、AppArmor、GRSecurity组件都是Docker官方推荐的安全加固组件,这三个组件可以限制一个容器对主机的内核或其他资源的访问控制,目前容器报告里的一些安全漏洞。

  • 资源限制:在生产环境中,建议每个容器都添加相应的资源限制,这样即便应用程序有漏洞,也不会导致主机的资源被耗尽,最大限度降低了安全风险。

  • 使用安全容器:容器有着轻便快速启动的优点,虚拟机有着安全隔离的优点,有没有一种技术可以兼顾两者的优点,做到既轻量又安全呢?答案是有的,那就是安全容器。安全容器与普通容器的主要区别在于,安全容器中的每个容器都运行在一个单独的微型虚拟机中,拥有独立的操作系统和内核,并且有虚拟机般的安全隔离性。